package lyl.twopointer;

/**
 *
 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。

 示例 1：

 https://leetcode.cn/problems/trapping-rain-water/
 */
public class TrappingWater {
    public int trap(int[] height) {
        if(height == null || height.length <= 2){
            return 0;
        }
        int sum = 0;
        int left = 0;
        int right = height.length - 1;
        int leftHeight = height[left];
        int rightHeight = height[right];
        while(left<right){
            //蓄水要满足，左部分，左高右低，右部分右高左低
            //长板不动，蓄水多少取决于短板，短的那边移动
            if(leftHeight < rightHeight){
                //出现高度差形成凹槽
                if(leftHeight > height[left + 1]){
                    sum += leftHeight - height[left + 1];
                }//凸起不能蓄水更改最大值
                else {
                    leftHeight = height[left + 1];
                }
                left ++;
            }else {
                if(rightHeight > height[right - 1]){
                    sum += rightHeight - height[right - 1];
                }else {
                    rightHeight = height [right - 1];
                }
                right --;
            }
        }
        return sum;
    }
}
